Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন যা কম্পোনেন্টগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি ইনজেক্ট করার জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনগুলিতে Dependency Injection খুবই গুরুত্বপূর্ণ এবং এটি বিল্ট-ইন ভাবে সমর্থিত, যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজ করে তোলে।
Dependency Injection (DI) একটি প্রযুক্তি যা ক্লাসগুলোর মধ্যে ব্যবহৃত ডিপেনডেন্সি (যেমন সার্ভিস, অবজেক্ট, বা রিসোর্স) বাইরের কোনো উৎস থেকে ইনজেক্ট করে, যাতে সেই ক্লাসগুলি সরাসরি তাদের ডিপেনডেন্সি তৈরি না করে। এর ফলে কোডের মডুলারিটি, রিইউজেবিলিটি এবং টেস্টেবিলিটি বৃদ্ধি পায়।
ASP.Net Core এ, DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনকে আরও বেশি ফ্লেক্সিবল, স্কেলেবল এবং টেস্টযোগ্য করা হয়।
ASP.Net Core-এর Startup.cs ফাইলে ConfigureServices মেথডে নির্দিষ্ট পরিষেবাগুলোর জন্য ডিপেনডেন্সি রেজিস্টার করা হয় এবং Configure মেথডে সেই পরিষেবাগুলি কনফিগার ও ব্যবহার করা হয়।
ASP.Net Core এর DI এর মূল উপাদানগুলো হলো:
একটি ইন্টারফেস তৈরি করুন যা আপনার সার্ভিসের জন্য শর্তাবলী নির্ধারণ করবে।
public interface IProductService
{
IEnumerable<string> GetAllProducts();
}
এখন, সেই ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি ক্লাস তৈরি করুন।
public class ProductService : IProductService
{
public IEnumerable<string> GetAllProducts()
{
return new List<string> { "Product 1", "Product 2", "Product 3" };
}
}
এখন, Startup.cs ফাইলে ConfigureServices মেথডে এই সার্ভিসটি রেজিস্টার করুন।
public void ConfigureServices(IServiceCollection services)
{
// DI কন্টেনারে সার্ভিস রেজিস্টার করা
services.AddScoped<IProductService, ProductService>();
services.AddControllersWithViews();
}
এখানে, AddScoped
ব্যবহার করা হয়েছে, যার মানে হল সার্ভিসটি HTTP request এর জন্য Scoped হবে। অর্থাৎ, একই HTTP অনুরোধের মধ্যে একাধিক কন্ট্রোলারে একই ইনস্ট্যান্স ব্যবহার হবে, কিন্তু নতুন HTTP অনুরোধের জন্য নতুন ইনস্ট্যান্স তৈরি হবে।
এখন আপনার কন্ট্রোলারে এই সার্ভিসটি ইনজেক্ট করুন। কন্ট্রোলারে Constructor Injection ব্যবহার করা হয়।
public class HomeController : Controller
{
private readonly IProductService _productService;
// DI মাধ্যমে সার্ভিস ইনজেক্ট করা হচ্ছে
public HomeController(IProductService productService)
{
_productService = productService;
}
public IActionResult Index()
{
var products = _productService.GetAllProducts();
return View(products);
}
}
এখন HomeController এর মধ্যে ইনজেক্ট করা সার্ভিসটি ব্যবহার করা হচ্ছে, যা কন্ট্রোলারের Index()
অ্যাকশনে GetAllProducts()
মেথডের মাধ্যমে ডেটা রিটার্ন করছে।
ASP.Net Core DI সিস্টেম তিনটি ধরনের লাইফটাইম সাপোর্ট করে:
Transient: প্রতিটি অনুরোধে নতুন ইনস্ট্যান্স তৈরি হবে।
services.AddTransient<IProductService, ProductService>();
Scoped: প্রতিটি HTTP অনুরোধে একটি ইনস্ট্যান্স থাকবে।
services.AddScoped<IProductService, ProductService>();
Singleton: পুরো অ্যাপ্লিকেশনে একমাত্র ইনস্ট্যান্স ব্যবহার হবে।
services.AddSingleton<IProductService, ProductService>();
ASP.Net Core অ্যাপ্লিকেশনগুলোতে Dependency Injection (DI) ব্যবহারের মাধ্যমে আপনি সহজে সার্ভিসগুলো রেজিস্টার, ম্যানেজ এবং কনফিগার করতে পারেন, যা কোডের মডুলারিটি, স্কেলেবিলিটি, এবং টেস্টেবিলিটি বৃদ্ধি করে। DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে low coupling এবং high cohesion নিশ্চিত করা সম্ভব হয়, যা একে সহজে মেইনটেইন এবং আপডেট করা যায়।
Read more